package net.inteidee.test;

import java.io.File;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.faces.context.FacesContext;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

/**
 * Classe che gestisce la lettura dai file xml , (web.xml, file di
 * configurazioni xml)
 * 
 * @author Rino
 * 
 */
public class XmlReader {

	String pathRelativo;
	String realPath;
	static SAXBuilder builder = new SAXBuilder();
	static Document document;

	static {

		String pathRelativo = readFromWebXmlFile("pathRelativo");
		String realPath = FacesContext.getCurrentInstance()
				.getExternalContext().getRealPath(pathRelativo);
		File xmlFile = new File(realPath);

		try {
			document = (Document) builder.build(xmlFile);
		} catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * Recupera il nome dell' applicazione dal file configuration.xml
	 * 
	 * @param tag
	 *            il nome del tag di interesse
	 * @return l valore del tag
	 */
	public static String getValueFromConfigurationXmlFile(String... tag) {

		// Prendo la radice
		Element rootNode = document.getRootElement();

		//Estraggo i figli dalla radice
		for(Element item : rootNode.getChildren()){

			if(item.getName().equals("informazioni") && tag[0].equals("informazioni")){

				Element description = item.getChild("nome");
				return description.getText();

			}
			else if(item.getName().equals("urls")  && tag[0].equals("urls")){

				List<Element> urls = item.getChildren();

				for(Element url : urls)	        	 
					if(url.getAttributeValue("pattern").equals(tag[1]))
						return url.getAttributeValue("role");


			}

		}
		
		return null;
	}

	
	
	
	/**
	 * Legge i parametri impostati nel file web.xml come <context-param>
	 * 
	 * @param nomeParamentro
	 *            nome del parametro da recuperare
	 * @return il valore del parametro
	 */
	public static String readFromWebXmlFile(String nomeParamentro) {

		FacesContext ctx = FacesContext.getCurrentInstance();
		String myConstantValue = ctx.getExternalContext().getInitParameter(
				"pathRelativo");

		return myConstantValue;

	}

}